package day02;

import java.util.Arrays;

/*
数组工具类：Arrays 提供了一些方法，方便操作数组
 */
public class Demo05 {
    public static void main(String[] args) {
        int[] scores = {90, 80, 70, 99, 88, 77, 66};

        System.out.println(scores); // 内存地址
        // Arrays 是类名  Arrays.toString 类中定义的静态方法
        System.out.println(Arrays.toString(scores)); // 打印数组的内容

        // sort 排序(从小到大)
        Arrays.sort(scores);
        System.out.println("排序后：" + Arrays.toString(scores));

        /*
        查找，二分查找
        在升序的序列中，查找某个元素是否存在。
        [66, 70, 77, 80, 88, 90, 99]
        先找到最中间的元素，要找的元素比中间元素小，从前半部分查找。
                           要找的元素比中间元素大，从后半部分查找。
        77 比中间元素80小，从 66, 70, 77 继续查找
        77 比 70 大，从 77 中找。找到。
        */
        int index = Arrays.binarySearch(scores, 77); // key 不要输入，是IDE自己加的
        System.out.println("找到，返回索引：" + index);
        // [66, 70, 77, 78, 80, 88, 90, 99]
        index = Arrays.binarySearch(scores, 78);
        // 插入点：如果78在数组中存在，应该在的位置。
        System.out.println("找不到，返回：-(插入点+1)：" + index);

        int[] ids = {66, 77, 77, 77, 78, 79, 80, 88, 89, 90, 99};
        index = Arrays.binarySearch(ids, 77);
        System.out.println("有多个时，返回第一次找到的77：" + index);

        Arrays.equals(scores, ids);
        // == 基本类型判等时，可以用。其他类型，如果用 == ，比较的是内存地址，不是比较的值。

        Arrays.fill(ids, 100); // 填充数组
        System.out.println(Arrays.toString(ids));

        int[] ss = new int[100];
        ss[0] = 1;
        ss[1] = 1;
        // 从哪个位置开始填充，到哪个位置结束（包含开始，不包含结束）
        Arrays.fill(ss, 2, ss.length, 3);
        System.out.println(Arrays.toString(ss));
    }
}
